home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Python 1.3.3 / Python 133 SRC / Mac / Modules / evt / Evtmodule.c < prev    next >
Text File  |  1996-04-12  |  10KB  |  430 lines

  1.  
  2. /* =========================== Module Evt =========================== */
  3.  
  4. #include "Python.h"
  5.  
  6.  
  7.  
  8. #define SystemSevenOrLater 1
  9.  
  10. #include "macglue.h"
  11. #include <Memory.h>
  12. #include <Dialogs.h>
  13. #include <Menus.h>
  14. #include <Controls.h>
  15.  
  16. extern PyObject *ResObj_New(Handle);
  17. extern int ResObj_Convert(PyObject *, Handle *);
  18. extern PyObject *OptResObj_New(Handle);
  19. extern int OptResObj_Convert(PyObject *, Handle *);
  20.  
  21. extern PyObject *WinObj_New(WindowPtr);
  22. extern int WinObj_Convert(PyObject *, WindowPtr *);
  23. extern PyTypeObject Window_Type;
  24. #define WinObj_Check(x) ((x)->ob_type == &Window_Type)
  25.  
  26. extern PyObject *DlgObj_New(DialogPtr);
  27. extern int DlgObj_Convert(PyObject *, DialogPtr *);
  28. extern PyTypeObject Dialog_Type;
  29. #define DlgObj_Check(x) ((x)->ob_type == &Dialog_Type)
  30.  
  31. extern PyObject *MenuObj_New(MenuHandle);
  32. extern int MenuObj_Convert(PyObject *, MenuHandle *);
  33.  
  34. extern PyObject *CtlObj_New(ControlHandle);
  35. extern int CtlObj_Convert(PyObject *, ControlHandle *);
  36.  
  37. extern PyObject *GrafObj_New(GrafPtr);
  38. extern int GrafObj_Convert(PyObject *, GrafPtr *);
  39.  
  40. extern PyObject *BMObj_New(BitMapPtr);
  41. extern int BMObj_Convert(PyObject *, BitMapPtr *);
  42.  
  43. extern PyObject *PMObj_New(PixMapHandle);
  44. extern int PMObj_Convert(PyObject *, PixMapHandle *);
  45.  
  46. extern PyObject *WinObj_WhichWindow(WindowPtr);
  47.  
  48. #include <Events.h>
  49. #include <Desk.h>
  50.  
  51. #define resNotFound -192 /* Can't include <Errors.h> because of Python's "errors.h" */
  52.  
  53. static PyObject *Evt_Error;
  54.  
  55. static PyObject *Evt_GetCaretTime(_self, _args)
  56.     PyObject *_self;
  57.     PyObject *_args;
  58. {
  59.     PyObject *_res = NULL;
  60.     UInt32 _rv;
  61.     if (!PyArg_ParseTuple(_args, ""))
  62.         return NULL;
  63.     _rv = GetCaretTime();
  64.     _res = Py_BuildValue("l",
  65.                          _rv);
  66.     return _res;
  67. }
  68.  
  69. static PyObject *Evt_SetEventMask(_self, _args)
  70.     PyObject *_self;
  71.     PyObject *_args;
  72. {
  73.     PyObject *_res = NULL;
  74.     EventMask value;
  75.     if (!PyArg_ParseTuple(_args, "h",
  76.                           &value))
  77.         return NULL;
  78.     SetEventMask(value);
  79.     Py_INCREF(Py_None);
  80.     _res = Py_None;
  81.     return _res;
  82. }
  83.  
  84. static PyObject *Evt_GetDblTime(_self, _args)
  85.     PyObject *_self;
  86.     PyObject *_args;
  87. {
  88.     PyObject *_res = NULL;
  89.     UInt32 _rv;
  90.     if (!PyArg_ParseTuple(_args, ""))
  91.         return NULL;
  92.     _rv = GetDblTime();
  93.     _res = Py_BuildValue("l",
  94.                          _rv);
  95.     return _res;
  96. }
  97.  
  98. static PyObject *Evt_GetNextEvent(_self, _args)
  99.     PyObject *_self;
  100.     PyObject *_args;
  101. {
  102.     PyObject *_res = NULL;
  103.     Boolean _rv;
  104.     EventMask eventMask;
  105.     EventRecord theEvent;
  106.     if (!PyArg_ParseTuple(_args, "h",
  107.                           &eventMask))
  108.         return NULL;
  109.     _rv = GetNextEvent(eventMask,
  110.                        &theEvent);
  111.     _res = Py_BuildValue("bO&",
  112.                          _rv,
  113.                          PyMac_BuildEventRecord, &theEvent);
  114.     return _res;
  115. }
  116.  
  117. static PyObject *Evt_WaitNextEvent(_self, _args)
  118.     PyObject *_self;
  119.     PyObject *_args;
  120. {
  121.     PyObject *_res = NULL;
  122.     Boolean _rv;
  123.     EventMask eventMask;
  124.     EventRecord theEvent;
  125.     UInt32 sleep;
  126.     if (!PyArg_ParseTuple(_args, "hl",
  127.                           &eventMask,
  128.                           &sleep))
  129.         return NULL;
  130.     _rv = WaitNextEvent(eventMask,
  131.                         &theEvent,
  132.                         sleep,
  133.                         (RgnHandle)0);
  134.     _res = Py_BuildValue("bO&",
  135.                          _rv,
  136.                          PyMac_BuildEventRecord, &theEvent);
  137.     return _res;
  138. }
  139.  
  140. static PyObject *Evt_EventAvail(_self, _args)
  141.     PyObject *_self;
  142.     PyObject *_args;
  143. {
  144.     PyObject *_res = NULL;
  145.     Boolean _rv;
  146.     EventMask eventMask;
  147.     EventRecord theEvent;
  148.     if (!PyArg_ParseTuple(_args, "h",
  149.                           &eventMask))
  150.         return NULL;
  151.     _rv = EventAvail(eventMask,
  152.                      &theEvent);
  153.     _res = Py_BuildValue("bO&",
  154.                          _rv,
  155.                          PyMac_BuildEventRecord, &theEvent);
  156.     return _res;
  157. }
  158.  
  159. static PyObject *Evt_GetMouse(_self, _args)
  160.     PyObject *_self;
  161.     PyObject *_args;
  162. {
  163.     PyObject *_res = NULL;
  164.     Point mouseLoc;
  165.     if (!PyArg_ParseTuple(_args, ""))
  166.         return NULL;
  167.     GetMouse(&mouseLoc);
  168.     _res = Py_BuildValue("O&",
  169.                          PyMac_BuildPoint, mouseLoc);
  170.     return _res;
  171. }
  172.  
  173. static PyObject *Evt_Button(_self, _args)
  174.     PyObject *_self;
  175.     PyObject *_args;
  176. {
  177.     PyObject *_res = NULL;
  178.     Boolean _rv;
  179.     if (!PyArg_ParseTuple(_args, ""))
  180.         return NULL;
  181.     _rv = Button();
  182.     _res = Py_BuildValue("b",
  183.                          _rv);
  184.     return _res;
  185. }
  186.  
  187. static PyObject *Evt_StillDown(_self, _args)
  188.     PyObject *_self;
  189.     PyObject *_args;
  190. {
  191.     PyObject *_res = NULL;
  192.     Boolean _rv;
  193.     if (!PyArg_ParseTuple(_args, ""))
  194.         return NULL;
  195.     _rv = StillDown();
  196.     _res = Py_BuildValue("b",
  197.                          _rv);
  198.     return _res;
  199. }
  200.  
  201. static PyObject *Evt_WaitMouseUp(_self, _args)
  202.     PyObject *_self;
  203.     PyObject *_args;
  204. {
  205.     PyObject *_res = NULL;
  206.     Boolean _rv;
  207.     if (!PyArg_ParseTuple(_args, ""))
  208.         return NULL;
  209.     _rv = WaitMouseUp();
  210.     _res = Py_BuildValue("b",
  211.                          _rv);
  212.     return _res;
  213. }
  214.  
  215. static PyObject *Evt_GetKeys(_self, _args)
  216.     PyObject *_self;
  217.     PyObject *_args;
  218. {
  219.     PyObject *_res = NULL;
  220.     KeyMap theKeys__out__;
  221.     if (!PyArg_ParseTuple(_args, ""))
  222.         return NULL;
  223.     GetKeys(theKeys__out__);
  224.     _res = Py_BuildValue("s#",
  225.                          (char *)&theKeys__out__, (int)sizeof(KeyMap));
  226.  theKeys__error__: ;
  227.     return _res;
  228. }
  229.  
  230. static PyObject *Evt_TickCount(_self, _args)
  231.     PyObject *_self;
  232.     PyObject *_args;
  233. {
  234.     PyObject *_res = NULL;
  235.     UInt32 _rv;
  236.     if (!PyArg_ParseTuple(_args, ""))
  237.         return NULL;
  238.     _rv = TickCount();
  239.     _res = Py_BuildValue("l",
  240.                          _rv);
  241.     return _res;
  242. }
  243.  
  244. static PyObject *Evt_PostEvent(_self, _args)
  245.     PyObject *_self;
  246.     PyObject *_args;
  247. {
  248.     PyObject *_res = NULL;
  249.     OSErr _err;
  250.     EventKind eventNum;
  251.     UInt32 eventMsg;
  252.     if (!PyArg_ParseTuple(_args, "hl",
  253.                           &eventNum,
  254.                           &eventMsg))
  255.         return NULL;
  256.     _err = PostEvent(eventNum,
  257.                      eventMsg);
  258.     if (_err != noErr) return PyMac_Error(_err);
  259.     Py_INCREF(Py_None);
  260.     _res = Py_None;
  261.     return _res;
  262. }
  263.  
  264. static PyObject *Evt_OSEventAvail(_self, _args)
  265.     PyObject *_self;
  266.     PyObject *_args;
  267. {
  268.     PyObject *_res = NULL;
  269.     Boolean _rv;
  270.     EventMask mask;
  271.     EventRecord theEvent;
  272.     if (!PyArg_ParseTuple(_args, "h",
  273.                           &mask))
  274.         return NULL;
  275.     _rv = OSEventAvail(mask,
  276.                        &theEvent);
  277.     _res = Py_BuildValue("bO&",
  278.                          _rv,
  279.                          PyMac_BuildEventRecord, &theEvent);
  280.     return _res;
  281. }
  282.  
  283. static PyObject *Evt_GetOSEvent(_self, _args)
  284.     PyObject *_self;
  285.     PyObject *_args;
  286. {
  287.     PyObject *_res = NULL;
  288.     Boolean _rv;
  289.     EventMask mask;
  290.     EventRecord theEvent;
  291.     if (!PyArg_ParseTuple(_args, "h",
  292.                           &mask))
  293.         return NULL;
  294.     _rv = GetOSEvent(mask,
  295.                      &theEvent);
  296.     _res = Py_BuildValue("bO&",
  297.                          _rv,
  298.                          PyMac_BuildEventRecord, &theEvent);
  299.     return _res;
  300. }
  301.  
  302. static PyObject *Evt_FlushEvents(_self, _args)
  303.     PyObject *_self;
  304.     PyObject *_args;
  305. {
  306.     PyObject *_res = NULL;
  307.     EventMask whichMask;
  308.     EventMask stopMask;
  309.     if (!PyArg_ParseTuple(_args, "hh",
  310.                           &whichMask,
  311.                           &stopMask))
  312.         return NULL;
  313.     FlushEvents(whichMask,
  314.                 stopMask);
  315.     Py_INCREF(Py_None);
  316.     _res = Py_None;
  317.     return _res;
  318. }
  319.  
  320. static PyObject *Evt_SystemClick(_self, _args)
  321.     PyObject *_self;
  322.     PyObject *_args;
  323. {
  324.     PyObject *_res = NULL;
  325.     EventRecord theEvent;
  326.     WindowPtr theWindow;
  327.     if (!PyArg_ParseTuple(_args, "O&O&",
  328.                           PyMac_GetEventRecord, &theEvent,
  329.                           WinObj_Convert, &theWindow))
  330.         return NULL;
  331.     SystemClick(&theEvent,
  332.                 theWindow);
  333.     Py_INCREF(Py_None);
  334.     _res = Py_None;
  335.     return _res;
  336. }
  337.  
  338. static PyObject *Evt_SystemTask(_self, _args)
  339.     PyObject *_self;
  340.     PyObject *_args;
  341. {
  342.     PyObject *_res = NULL;
  343.     if (!PyArg_ParseTuple(_args, ""))
  344.         return NULL;
  345.     SystemTask();
  346.     Py_INCREF(Py_None);
  347.     _res = Py_None;
  348.     return _res;
  349. }
  350.  
  351. static PyObject *Evt_SystemEvent(_self, _args)
  352.     PyObject *_self;
  353.     PyObject *_args;
  354. {
  355.     PyObject *_res = NULL;
  356.     Boolean _rv;
  357.     EventRecord theEvent;
  358.     if (!PyArg_ParseTuple(_args, "O&",
  359.                           PyMac_GetEventRecord, &theEvent))
  360.         return NULL;
  361.     _rv = SystemEvent(&theEvent);
  362.     _res = Py_BuildValue("b",
  363.                          _rv);
  364.     return _res;
  365. }
  366.  
  367. static PyMethodDef Evt_methods[] = {
  368.     {"GetCaretTime", (PyCFunction)Evt_GetCaretTime, 1,
  369.      "() -> (UInt32 _rv)"},
  370.     {"SetEventMask", (PyCFunction)Evt_SetEventMask, 1,
  371.      "(EventMask value) -> None"},
  372.     {"GetDblTime", (PyCFunction)Evt_GetDblTime, 1,
  373.      "() -> (UInt32 _rv)"},
  374.     {"GetNextEvent", (PyCFunction)Evt_GetNextEvent, 1,
  375.      "(EventMask eventMask) -> (Boolean _rv, EventRecord theEvent)"},
  376.     {"WaitNextEvent", (PyCFunction)Evt_WaitNextEvent, 1,
  377.      "(EventMask eventMask, UInt32 sleep) -> (Boolean _rv, EventRecord theEvent)"},
  378.     {"EventAvail", (PyCFunction)Evt_EventAvail, 1,
  379.      "(EventMask eventMask) -> (Boolean _rv, EventRecord theEvent)"},
  380.     {"GetMouse", (PyCFunction)Evt_GetMouse, 1,
  381.      "() -> (Point mouseLoc)"},
  382.     {"Button", (PyCFunction)Evt_Button, 1,
  383.      "() -> (Boolean _rv)"},
  384.     {"StillDown", (PyCFunction)Evt_StillDown, 1,
  385.      "() -> (Boolean _rv)"},
  386.     {"WaitMouseUp", (PyCFunction)Evt_WaitMouseUp, 1,
  387.      "() -> (Boolean _rv)"},
  388.     {"GetKeys", (PyCFunction)Evt_GetKeys, 1,
  389.      "() -> (KeyMap theKeys)"},
  390.     {"TickCount", (PyCFunction)Evt_TickCount, 1,
  391.      "() -> (UInt32 _rv)"},
  392.     {"PostEvent", (PyCFunction)Evt_PostEvent, 1,
  393.      "(EventKind eventNum, UInt32 eventMsg) -> None"},
  394.     {"OSEventAvail", (PyCFunction)Evt_OSEventAvail, 1,
  395.      "(EventMask mask) -> (Boolean _rv, EventRecord theEvent)"},
  396.     {"GetOSEvent", (PyCFunction)Evt_GetOSEvent, 1,
  397.      "(EventMask mask) -> (Boolean _rv, EventRecord theEvent)"},
  398.     {"FlushEvents", (PyCFunction)Evt_FlushEvents, 1,
  399.      "(EventMask whichMask, EventMask stopMask) -> None"},
  400.     {"SystemClick", (PyCFunction)Evt_SystemClick, 1,
  401.      "(EventRecord theEvent, WindowPtr theWindow) -> None"},
  402.     {"SystemTask", (PyCFunction)Evt_SystemTask, 1,
  403.      "() -> None"},
  404.     {"SystemEvent", (PyCFunction)Evt_SystemEvent, 1,
  405.      "(EventRecord theEvent) -> (Boolean _rv)"},
  406.     {NULL, NULL, 0}
  407. };
  408.  
  409.  
  410.  
  411.  
  412. void initEvt()
  413. {
  414.     PyObject *m;
  415.     PyObject *d;
  416.  
  417.  
  418.  
  419.  
  420.     m = Py_InitModule("Evt", Evt_methods);
  421.     d = PyModule_GetDict(m);
  422.     Evt_Error = PyMac_GetOSErrException();
  423.     if (Evt_Error == NULL ||
  424.         PyDict_SetItemString(d, "Error", Evt_Error) != 0)
  425.         Py_FatalError("can't initialize Evt.Error");
  426. }
  427.  
  428. /* ========================= End module Evt ========================= */
  429.  
  430.